let ws;

// 初始化WebSocket连接
function initWebSocket() {
    ws = new WebSocket(`ws://${window.location.host}/ws`);

    ws.onmessage = function (event) {
        const data = JSON.parse(event.data);

        switch (data.type) {
            case 'progress':
                updateProgress(data.progress);
                break;
            case 'message':
                appendLog(data.message);
                break;
            default:
                console.log('未知消息类型:', data);
        }
    };

    ws.onclose = function () {
        console.log('WebSocket连接已关闭，尝试重新连接...');
        setTimeout(initWebSocket, 3000);
    };

    ws.onerror = function (err) {
        console.error('WebSocket错误:', err);
    };
}

// 更新进度条
function updateProgress(percent) {
    // 确保进度值在0-100之间
    percent = Math.min(100, Math.max(0, percent));
    document.getElementById('progress').style.width = percent + '%';
    document.getElementById('progress-text').textContent = `${percent}%`;

    // 如果进度达到100%，添加完成消息
    if (percent === 100) {
        appendLog('处理完成！');
    }
}

// 存储最近的日志记录
const MAX_LOG_ENTRIES = 1000;
const logEntries = [];

// 添加日志
function appendLog(message) {
    // 如果是进度消息，更新进度文本
    if (message.startsWith('进度：')) {
        document.getElementById('progress-text').textContent =
            `${document.getElementById('progress-text').textContent} (${message.substring(3)})`;
        return;
    }

    // 添加新日志到数组
    logEntries.push(message);

    // 如果超出最大数量，移除最旧的记录
    if (logEntries.length > MAX_LOG_ENTRIES) {
        logEntries.shift();
    }

    const logDiv = document.getElementById('log');
    // 重新渲染所有日志
    logDiv.innerHTML = logEntries.map(msg => `<div>${msg}</div>`).join('');
    logDiv.scrollTop = logDiv.scrollHeight;
}

// 初始化选项
function initializeOptions() {
    // 初始化年份选项
    const yearSelect = document.getElementById('year');
    const currentYear = new Date().getFullYear();
    const years = [];
    // 添加前一年的春秋季
    years.push(`${(currentYear - 1).toString().slice(-2)}春`);
    years.push(`${(currentYear - 1).toString().slice(-2)}秋`);
    // 添加当前年的春秋季
    years.push(`${currentYear.toString().slice(-2)}春`);
    years.push(`${currentYear.toString().slice(-2)}秋`);
    // 添加下一年的春秋季
    years.push(`${(currentYear + 1).toString().slice(-2)}春`);
    years.push(`${(currentYear + 1).toString().slice(-2)}秋`);

    years.forEach(year => {
        const item = document.createElement('label');
        item.className = 'checkbox-item';
        item.innerHTML = `
            <input type="checkbox" value="${year}">
            <span>${year}</span>
        `;
        item.querySelector('input').addEventListener('change', function () {
            this.parentElement.classList.toggle('checked', this.checked);
        });
        yearSelect.appendChild(item);
    });

    // 初始化省份选项
    const provinces = ["北京市", "天津市", "上海市", "重庆市", "河北省", "山西省", "辽宁省", "吉林省", "黑龙江省", "江苏省", "浙江省", "安徽省", "福建省", "江西省", "山东省", "河南省", "湖北省", "湖南省", "广东省", "海南省", "四川省", "贵州省", "云南省", "陕西省", "甘肃省", "青海省", "台湾省", "内蒙古自治区", "广西壮族自治区", "西藏自治区", "宁夏回族自治区", "新疆维吾尔自治区", "香港特别行政区", "澳门特别行政区"];
    const provinceSelect = document.getElementById('province');
    provinces.forEach(province => {
        const item = document.createElement('label');
        item.className = 'checkbox-item';
        item.innerHTML = `
            <input type="checkbox" value="${province}">
            <span>${province}</span>
        `;
        item.querySelector('input').addEventListener('change', function () {
            this.parentElement.classList.toggle('checked', this.checked);
            updateCities(getSelectedProvinces());
        });
        provinceSelect.appendChild(item);
    });

    // 初始化年级选项
    const grades = ["一年级", "二年级", "三年级", "四年级", "五年级", "六年级"];
    const gradeSelect = document.getElementById('grade');
    grades.forEach(grade => {
        const item = document.createElement('label');
        item.className = 'checkbox-item';
        item.innerHTML = `
            <input type="checkbox" value="${grade}">
            <span>${grade}</span>
        `;
        item.querySelector('input').addEventListener('change', function () {
            this.parentElement.classList.toggle('checked', this.checked);
        });
        gradeSelect.appendChild(item);
    });

    // 初始化学科选项
    const subjects = ["语文", "数学", "英语"];
    const subjectSelect = document.getElementById('subject');
    subjects.forEach(subject => {
        const item = document.createElement('label');
        item.className = 'checkbox-item';
        item.innerHTML = `
            <input type="checkbox" value="${subject}">
            <span>${subject}</span>
        `;
        item.querySelector('input').addEventListener('change', function () {
            this.parentElement.classList.toggle('checked', this.checked);
        });
        subjectSelect.appendChild(item);
    });

    // 添加省份变化监听器
    provinceSelect.addEventListener('change', function () {
        const selectedProvinces = Array.from(this.selectedOptions).map(opt => opt.value);
        updateCities(selectedProvinces);
    });

    // 初始化第一个省份的城市
    if (provinces.length > 0) {
        updateCities(provinces[0]);
    }
}

// 更新城市选择函数
function updateCities(provinces) {
    const citySelect = document.getElementById('city');
    citySelect.innerHTML = '';

    // 获取所有选中省份的城市
    let allCities = [];
    provinces.forEach(province => {
        const cities = getCitiesByProvince(province);
        allCities = allCities.concat(cities);
    });

    // 去重
    allCities = [...new Set(allCities)];

    allCities.forEach(city => {
        const item = document.createElement('label');
        item.className = 'checkbox-item';
        item.innerHTML = `
            <input type="checkbox" value="${city}">
            <span>${city}</span>
        `;
        item.querySelector('input').addEventListener('change', function () {
            this.parentElement.classList.toggle('checked', this.checked);
        });
        citySelect.appendChild(item);
    });
}

// 根据省份获取城市列表
function getCitiesByProvince(province) {
    const cityMap = {
        "北京市": ["北京市"],
        "天津市": ["天津市"],
        "上海市": ["上海市"],
        "重庆市": ["重庆市"],
        "河北省": ["石家庄市", "唐山市", "秦皇岛市", "邯郸市", "邢台市", "保定市", "张家口市", "承德市", "沧州市", "廊坊市", "衡水市"],
        "山西省": ["太原市", "大同市", "朔州市", "阳泉市", "长治市", "晋城市", "忻州市", "吕梁市", "晋中市", "临汾市", "运城市"],
        "辽宁省": ["沈阳市", "大连市", "鞍山市", "抚顺市", "本溪市", "丹东市", "锦州市", "营口市", "阜新市", "辽阳市", "盘锦市", "铁岭市", "朝阳市", "葫芦岛市"],
        "吉林省": ["长春市", "吉林市", "四平市", "辽源市", "通化市", "白山市", "松原市", "白城市"],
        "黑龙江省": ["哈尔滨市", "齐齐哈尔市", "鹤岗市", "双鸭山市", "鸡西市", "大庆市", "伊春市", "牡丹江市", "佳木斯市", "七台河市", "黑河市", "绥化市"],
        "江苏省": ["南京市", "无锡市", "徐州市", "常州市", "苏州市", "南通市", "连云港市", "淮安市", "盐城市", "扬州市", "镇江市", "泰州市", "宿迁市"],
        "浙江省": ["杭州市", "宁波市", "温州市", "嘉兴市", "湖州市", "绍兴市", "金华市", "衢州市", "舟山市", "台州市", "丽水市"],
        "安徽省": ["合肥市", "芜湖市", "蚌埠市", "淮南市", "马鞍山市", "淮北市", "铜陵市", "安庆市", "黄山市", "滁州市", "阜阳市", "宿州市", "巢湖市", "六安市", "亳州市", "池州市", "宣城市"],
        "福建省": ["福州市", "厦门市", "莆田市", "三明市", "泉州市", "漳州市", "南平市", "龙岩市", "宁德市"],
        "江西省": ["南昌市", "景德镇市", "萍乡市", "九江市", "新余市", "鹰潭市", "赣州市", "吉安市", "宜春市", "抚州市", "上饶市"],
        "山东省": ["济南市", "青岛市", "淄博市", "枣庄市", "东营市", "烟台市", "潍坊市", "济宁市", "泰安市", "威海市", "日照市", "莱芜市", "临沂市", "德州市", "聊城市", "滨州市", "菏泽市"],
        "河南省": ["郑州市", "开封市", "洛阳市", "平顶山市", "安阳市", "鹤壁市", "新乡市", "焦作市", "濮阳市", "许昌市", "漯河市", "三门峡市", "南阳市", "商丘市", "信阳市", "周口市", "驻马店市"],
        "湖北省": ["武汉市", "黄石市", "十堰市", "宜昌市", "襄阳市", "鄂州市", "荆门市", "孝感市", "荆州市", "冈市", "咸宁市", "随州市", "恩施土家族苗族自治州市"],
        "湖南省": ["长沙市", "株洲市", "湘潭市", "衡阳市", "邵阳市", "岳阳市", "常德市", "张家界市", "益阳市", "郴州市", "永州市", "怀化市", "娄底市", "湘西土家族苗族自治州市"],
        "广东省": ["广州市", "韶关市", "深圳市", "珠海市", "汕头市", "佛山市", "江门市", "湛江市", "茂名市", "肇庆市", "惠州市", "梅州市", "汕尾市", "河源市", "阳江市", "清远市", "东莞市", "中山市", "潮州市", "揭阳市", "云浮市"],
        "海南省": ["海口市", "三亚市", "三沙市", "儋州市"],
        "四川省": ["成都市", "自贡市", "攀枝花市", "泸州市", "德阳市", "绵阳市", "广元市", "遂宁市", "内江市", "乐山市", "南充市", "眉山市", "宜宾市", "广安市", "达州市", "雅安市", "巴中市", "资阳市", "阿坝藏族羌族自治州市", "甘孜藏族自治州市", "凉山彝族自治州市"],
        "贵州省": ["贵阳市", "六盘水市", "遵义市", "安顺市", "铜仁市", "黔西南布依族苗族自治州市", "毕节市", "黔东南苗族侗族自治州市", "黔南布依族苗族自治州市"],
        "云南省": ["昆明市", "曲靖市", "玉溪市", "保山市", "昭通市", "丽江市", "普洱市", "临沧市", "楚雄彝族自治州市", "红河哈尼族彝族自治州市", "文山壮族苗族自治州市", "西双版纳傣族自治州市", "大理白族自治州市", "德宏傣族景颇族自治州市", "怒江傈僳族自治州市", "迪庆藏族自治州市"],
        "陕西省": ["西安市", "铜川市", "宝鸡市", "咸阳市", "渭南市", "延安市", "汉中市", "榆林市", "安康市", "商洛市"],
        "甘肃省": ["兰州市", "嘉峪关市", "金昌市", "白银市", "天水市", "武威市", "张掖市", "平凉市", "酒泉市", "庆阳市", "定西市", "陇南市", "临夏回族自治州市", "甘南藏族自治州市"],
        "青海省": ["西宁市", "海东市", "海北藏族自治州市", "黄南藏族自治州市", "海南藏族自治州市", "果洛藏族自治州市", "玉树藏族自治州市", "海西蒙古族藏族自治州市"],
        "内蒙古自治区": ["呼和浩特市", "包头市", "乌海市", "赤峰市", "通辽市", "鄂尔多斯市", "呼伦贝尔市", "巴彦淖尔市", "乌兰察布市", "兴安盟市", "锡林郭勒盟市", "阿拉善盟市"],
        "广西壮族自治区": ["南宁市", "柳州市", "桂林市", "梧州市", "北海市", "防城港市", "钦州市", "贵港市", "玉林市", "百色市", "贺州市", "河池市", "来宾市", "崇左市"],
        "西藏自治区": ["拉萨市", "昌都市", "山南市", "日喀则市", "那曲市", "阿里地区", "林芝市"],
        "宁夏回族自治区": ["银川市", "石嘴山市", "吴忠市", "固原市", "中卫市"],
        "新疆维吾尔自治区": ["乌鲁木齐市", "克拉玛依市", "吐鲁番市", "哈密市", "昌吉回族自治州市", "博尔塔拉蒙古自治州市", "巴音郭楞蒙古自治州市", "阿克苏地区市", "克孜勒苏柯尔克孜自治州市", "喀什地区市", "和田地区市", "伊犁哈萨克自治州市", "塔城地区市", "阿勒泰地区市"],
        "台湾省": ["台北市", "新北市", "桃园市", "台中市", "台南市", "高雄市", "基隆市", "新竹市", "嘉义市"],
        "香港特别行政区": ["香港特别行政区"],
        "澳门特别行政区": ["澳门特别行政区"]
    };
    return cityMap[province] || [];
}

// 获取选中的省份
function getSelectedProvinces() {
    return Array.from(document.querySelectorAll('#province input:checked')).map(cb => cb.value);
}

// 获取选中的城市
function getSelectedCities() {
    return Array.from(document.querySelectorAll('#city input:checked')).map(cb => cb.value);
}

// 获取选中的年级
function getSelectedGrades() {
    return Array.from(document.querySelectorAll('#grade input:checked')).map(cb => cb.value);
}

// 获取选中的学科
function getSelectedSubjects() {
    return Array.from(document.querySelectorAll('#subject input:checked')).map(cb => cb.value);
}

// 获取选中的年份
function getSelectedYears() {
    return Array.from(document.querySelectorAll('#year input:checked')).map(cb => cb.value);
}

// 添加表单验证函数
function validateForm() {
    const errors = [];

    // 检查年份选择
    if (getSelectedYears().length === 0) {
        errors.push("请至少选择一个年份");
    }

    // 检查省份选择
    if (getSelectedProvinces().length === 0) {
        errors.push("请至少选择一个省份");
    }

    // 检查城市选择
    if (getSelectedCities().length === 0) {
        errors.push("请至少选择一个城市");
    }

    // 检查年级选择
    if (getSelectedGrades().length === 0) {
        errors.push("请至少选择一个年级");
    }

    // 检查学科选择
    if (getSelectedSubjects().length === 0) {
        errors.push("请至少选择一个学科");
    }

    // 检查源目录
    const sourceDir = document.getElementById('sourceDir').value;
    if (!sourceDir) {
        errors.push("请选择源目录");
    }

    // 检查目标目录
    const targetDir = document.getElementById('targetDir').value;
    if (!targetDir) {
        errors.push("请选择目标目录");
    }

    // 检查源目录和目标目录是否相同
    if (sourceDir && targetDir && sourceDir === targetDir) {
        errors.push("源目录和目标目录不能相同");
    }

    return errors;
}

// 显示错误提示
function showError(errors) {
    if (errors.length > 0) {
        const errorDiv = document.getElementById('error-message');
        errorDiv.innerHTML = errors.map(err => `
            <div class="error-item">
                ⚠️ ${err}
            </div>
        `).join('');
        const dialog = document.getElementById('error-dialog');
        dialog.style.display = 'flex';
    }
}

// 关闭错误提示弹窗
function closeErrorDialog() {
    const dialog = document.getElementById('error-dialog');
    dialog.style.display = 'none';
}

// 保存用户选择
function saveUserSelections() {
    const selections = {
        years: getSelectedYears(),
        provinces: getSelectedProvinces(),
        cities: getSelectedCities(),
        grades: getSelectedGrades(),
        subjects: getSelectedSubjects(),
        sourceDir: document.getElementById('sourceDir').value,
        targetDir: document.getElementById('targetDir').value
    };
    localStorage.setItem('userSelections', JSON.stringify(selections));
}

// 恢复用户选择
function restoreUserSelections() {
    const savedSelections = localStorage.getItem('userSelections');
    if (savedSelections) {
        const selections = JSON.parse(savedSelections);

        // 恢复选择
        restoreCheckboxSelections('year', selections.years);
        restoreCheckboxSelections('province', selections.provinces);
        restoreCheckboxSelections('grade', selections.grades);
        restoreCheckboxSelections('subject', selections.subjects);

        // 恢复目录
        document.getElementById('sourceDir').value = selections.sourceDir || '';
        document.getElementById('targetDir').value = selections.targetDir || '';

        // 更新城市列表并恢复选择
        updateCities(selections.provinces);
        setTimeout(() => {
            restoreCheckboxSelections('city', selections.cities);
        }, 100);
    }
}

// 恢复复选框选择
function restoreCheckboxSelections(elementId, selectedValues) {
    if (!selectedValues) return;
    const checkboxes = document.querySelectorAll(`#${elementId} input[type="checkbox"]`);
    checkboxes.forEach(checkbox => {
        if (selectedValues.includes(checkbox.value)) {
            checkbox.checked = true;
            checkbox.parentElement.classList.add('checked');
        }
    });
}

// 修改开始分类函数
function startClassify() {
    // 表单验证
    const errors = validateForm();
    if (errors.length > 0) {
        showError(errors);
        return;
    }

    if (!ws || ws.readyState !== WebSocket.OPEN) {
        appendLog("正在建立WebSocket连接...");
        initWebSocket();
        setTimeout(startClassify, 1000);
        return;
    }

    // 保存用户选择
    saveUserSelections();

    // 禁用开始按钮
    const startBtn = document.getElementById('startBtn');
    startBtn.disabled = true;
    startBtn.textContent = '处理中...';

    const data = {
        years: getSelectedYears(),
        provinces: getSelectedProvinces(),
        cities: getSelectedCities(),
        grades: getSelectedGrades(),
        subjects: getSelectedSubjects(),
        sourceDir: document.getElementById('sourceDir').value,
        targetDir: document.getElementById('targetDir').value
    };

    fetch('/classify', {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json'
        },
        body: JSON.stringify(data)
    })
        .then(response => response.json())
        .then(data => {
            if (data.error) {
                appendLog('错误: ' + data.error);
                showError([data.error]);
            }
        })
        .catch(error => {
            console.error('错误:', error);
            appendLog('请求错误: ' + error.message);
            showError([error.message]);
        })
        .finally(() => {
            // 恢复按钮状态
            startBtn.disabled = false;
            startBtn.textContent = '开始分类';
        });
}

// 在页面加载完成后初始化
document.addEventListener('DOMContentLoaded', function () {
    initializeOptions();
    initWebSocket();
    // 恢复上次的选择
    restoreUserSelections();
});

// 目录选择对话框
function createDirDialog() {
    const dialog = document.createElement('div');
    dialog.className = 'dir-dialog';
    dialog.innerHTML = `
        <div class="dir-dialog-content">
            <div class="dir-dialog-header">
                <h3>选择目录</h3>
                <button onclick="closeDirDialog()">×</button>
            </div>
            <div class="dir-dialog-body">
                <div class="current-path"></div>
                <div class="dir-list"></div>
            </div>
            <div class="dir-dialog-footer">
                <button onclick="confirmDirSelection()">确定</button>
                <button onclick="closeDirDialog()">取消</button>
            </div>
        </div>
    `;
    return dialog;
}

let currentDirDialog = null;
let selectedDir = '';
let targetInput = null;

function selectSourceDir() {
    openDirDialog(document.getElementById('sourceDir'));
}

function selectTargetDir() {
    openDirDialog(document.getElementById('targetDir'));
}

function openDirDialog(input) {
    targetInput = input;
    if (!currentDirDialog) {
        currentDirDialog = createDirDialog();
        document.body.appendChild(currentDirDialog);
    }
    currentDirDialog.style.display = 'flex';
    loadDirContent(input.value || '');
}

function closeDirDialog() {
    if (currentDirDialog) {
        currentDirDialog.style.display = 'none';
    }
}

function confirmDirSelection() {
    if (targetInput && selectedDir) {
        targetInput.value = selectedDir;
    }
    closeDirDialog();
}

function loadDirContent(dir) {
    fetch(`/select-dir?dir=${encodeURIComponent(dir)}`)
        .then(response => response.json())
        .then(data => {
            selectedDir = data.currentDir;
            const currentPathDiv = currentDirDialog.querySelector('.current-path');
            const dirListDiv = currentDirDialog.querySelector('.dir-list');

            currentPathDiv.textContent = data.currentDir;
            dirListDiv.innerHTML = '';

            data.dirs.forEach(dir => {
                const dirElement = document.createElement('div');
                dirElement.className = 'dir-item';
                dirElement.textContent = dir.name;
                dirElement.onclick = () => loadDirContent(dir.path);
                dirListDiv.appendChild(dirElement);
            });
        })
        .catch(error => {
            console.error('加载目录失败:', error);
        });
}

// 全选省份
function selectAllProvinces() {
    const checkboxes = document.querySelectorAll('#province input[type="checkbox"]');
    checkboxes.forEach(checkbox => {
        checkbox.checked = true;
        checkbox.parentElement.classList.add('checked');
    });
    updateCities(getSelectedProvinces());
}

// 反选省份
function invertProvinces() {
    const checkboxes = document.querySelectorAll('#province input[type="checkbox"]');
    checkboxes.forEach(checkbox => {
        checkbox.checked = !checkbox.checked;
        checkbox.parentElement.classList.toggle('checked', checkbox.checked);
    });
    updateCities(getSelectedProvinces());
}

// 全选城市
function selectAllCities() {
    const checkboxes = document.querySelectorAll('#city input[type="checkbox"]');
    checkboxes.forEach(checkbox => {
        checkbox.checked = true;
        checkbox.parentElement.classList.add('checked');
    });
}

// 反选城市
function invertCities() {
    const checkboxes = document.querySelectorAll('#city input[type="checkbox"]');
    checkboxes.forEach(checkbox => {
        checkbox.checked = !checkbox.checked;
        checkbox.parentElement.classList.toggle('checked', checkbox.checked);
    });
} 